#pragma once

#include <cstdint>
#include <string>
#include <vector>
#include "hidbox/types.h"

// 前向声明 hid-rp 库的类型
namespace hid {
class DeviceDescriptor;
}

namespace hidbox {

/**
 * @brief HID Gadget 设备描述符
 * 包含配置 USB Gadget 所需的所有信息
 */
struct HIDGadgetDescriptor {
    u16 bcd_usb;           // USB 规范版本号
    u8 device_subclass;    // 设备子类
    u8 device_protocol;    // 设备协议
    u8 max_packet_size0;   // 端点 0 最大包大小

    u16 vendor_id;         // 厂商 ID
    u16 product_id;        // 产品 ID
    u16 bcd_device;        // 设备版本号

    std::string manufacturer;  // 制造商字符串
    std::string product;       // 产品名称字符串
    std::string serial;        // 序列号字符串

    u32 hid_protocol;      // HID 协议 (0=无, 1=键盘, 2=鼠标)
    u32 hid_subclass;      // HID 子类
    hid::DeviceDescriptor* report_descriptor;  // HID 报告描述符（解析后）
    std::vector<u8> report_descriptor_data;    // HID 报告描述符原始数据
    u16 report_length;     // 报告长度

    ~HIDGadgetDescriptor();
};

}  // namespace hidbox
